package com.apiauto.data_util;

import java.lang.reflect.Method;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.alibaba.fastjson.JSONObject;
import com.apiauto.asserts.assertUtil;
import com.apiauto.log.Log;
import com.apiauto.pojo.Rest;
import com.google.common.base.Strings;

/**
 * PS:接口信息工具类
 * @author lkk
 *
 */
public class RestUtil {
	/**
	 * PS:根据指定字段及字段值查找指定字节码实体对象的某个字段值
	 * @param <T>
	 * @param field 指定搜索字段
	 * @param data 搜索字段值
	 * @param target 目标提取字段
	 * @param clazz 实体类型字节码对象
	 * @param list 需要提取的实体类型字节码集合
	 * @return 目标提取字段的值
	 */
	public static <T> String getResultByfield(String field,String data,String target,Class<T> clazz,List<T> list) {
		//判断提供的查询数据是否为空
		if(Strings.isNullOrEmpty(data)) {
			return "";
		}
		//将字段名首字母大写
		StringBuffer selectFieldBuffer = new StringBuffer(field);
		selectFieldBuffer.replace(0, 1, String.valueOf(field.charAt(0)).toUpperCase());
		//查询指定字段值方法名
		String selectFieldString = "get"+selectFieldBuffer.toString();
		
		//将字段名首字母大写
		StringBuffer selectTargetBuffer = new StringBuffer(target);
		selectTargetBuffer.replace(0, 1, String.valueOf(target.charAt(0)).toUpperCase());
		//查询返回结果方法名
		String selectTargetString = "get"+selectTargetBuffer.toString();
		try {
			//查询指定字段值方法对象
			Method selectFieldmethod = clazz.getMethod(selectFieldString);
			//查询返回结果方法对象
			Method selectTargetmethod = clazz.getMethod(selectTargetString);
			for(T rest:list) {
				//获取查询字段值
				String fieldresult = (String) selectFieldmethod.invoke(rest);
				//判断查询字段值是否与提供的数据结果一致
				if(data.equals(fieldresult)) {
					//一致则返回需要的字段值数据
					String targetResult = (String) selectTargetmethod.invoke(rest);
					return targetResult;
				}
			}
		} catch (Exception e) {
			Log.error("反射调用Rest方法失败");
		}
		return "";
	}
	

}
